\relax 
\citation{liszt,inspect-execute,CJ2011,op2-lcpc}
\citation{liszt,CJ2011}
\citation{liszt,CJ2011}
\citation{metis}
\citation{liszt}
\citation{CJ2011}
\citation{CJ2011,liszt}
\citation{op2-lcpc}
\@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{1}}
\newlabel{sec:intro}{{1}{1}}
\citation{ROSE}
\citation{stencil-gpu-1,sblock}
\citation{liszt}
\citation{scala}
\citation{liszt}
\citation{CJ2011}
\citation{op2-lcpc}
\citation{ROSE}
\citation{OP2-User}
\citation{CJ2011}
\@writefile{toc}{\contentsline {section}{\numberline {2}Related Work}{2}}
\newlabel{sec:rw}{{2}{2}}
\@writefile{toc}{\contentsline {section}{\numberline {3}The OP2 Implementation on GPUs}{2}}
\newlabel{sec:op2}{{3}{2}}
\citation{OP2-User}
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Example mesh}}{3}}
\newlabel{fig:mesh}{{1}{3}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Mesh Declarations}{3}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Parallel Loops in OP2}{3}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Implementation of Parallel Loops}{4}}
\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Data staging phase in CUDA kernels. The threads in a block coalesce dataset accesses between device and shared memory.}}{5}}
\newlabel{fig:coalesced-stagein}{{2}{5}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.4}Partitioning and Scheduling for Indirect Loops}{5}}
\newlabel{subsec:indirect}{{3.4}{5}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.5}Staging Data into Shared Memory}{5}}
\citation{CJ2011}
\citation{op2-lcpc}
\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Original op\_par\_loop implementation.}}{6}}
\newlabel{fig:split-original}{{3}{6}}
\@writefile{toc}{\contentsline {section}{\numberline {4}Loop Splitting}{6}}
\newlabel{sec:split}{{4}{6}}
\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces Split op\_par\_loop by generating three successive loops. This requires modification of the user code.}}{6}}
\newlabel{fig:split-lcpc}{{4}{6}}
\@writefile{lof}{\contentsline {figure}{\numberline {5}{\ignorespaces Split of contribution calculation and vertex updates.}}{6}}
\newlabel{fig:split-contrib}{{5}{6}}
\citation{op2-lcpc}
\citation{op2-lcpc}
\citation{ROSE}
\@writefile{lof}{\contentsline {figure}{\numberline {6}{\ignorespaces Split of contribution calculation in multiple functions.}}{7}}
\newlabel{fig:split-general}{{6}{7}}
\citation{op2-lcpc}
\citation{op2-lcpc}
\@writefile{toc}{\contentsline {section}{\numberline {5}Experiments}{8}}
\newlabel{sec:exp}{{5}{8}}
\@writefile{lof}{\contentsline {figure}{\numberline {7}{\ignorespaces Loop performance of NASA Rotor 37 with 2.5 million edges on a GPU. This version of the loops is not tuned w.r.t. the block size.}}{8}}
\newlabel{fig:cudanoblock}{{7}{8}}
\@writefile{lof}{\contentsline {figure}{\numberline {8}{\ignorespaces Loop performance of NASA Rotor 37 with 2.5 million edges on a GPU. This version of the loops is tuned w.r.t. the block size.}}{8}}
\newlabel{fig:cuda1}{{8}{8}}
\@writefile{lot}{\contentsline {table}{\numberline {1}{\ignorespaces Single node CPU system specifications}}{8}}
\newlabel{tab:system-specs}{{1}{8}}
\citation{op2-cf}
\citation{sparsetiling}
\@writefile{toc}{\contentsline {section}{\numberline {6}Conclusion}{9}}
\newlabel{sec:conc}{{6}{9}}
\@writefile{lof}{\contentsline {figure}{\numberline {9}{\ignorespaces Loop performance of NASA Rotor 37 with 2.5 million edges on a CPU with 1 OpenMP thread. The graph shows execution time of each loop in its original and split version}}{9}}
\newlabel{fig:openmp1}{{9}{9}}
\@writefile{lof}{\contentsline {figure}{\numberline {10}{\ignorespaces Loop performance of NASA Rotor 37 with 2.5 million edges on a CPU with 2 OpenMP threads. The graph shows execution time of each loop in its original and split version}}{9}}
\newlabel{fig:openmp2}{{10}{9}}
\bibstyle{abbrvnat}
\bibdata{hydra}
\bibcite{ROSE}{{1}{}{{ROS}}{{}}}
\bibcite{scala}{{2}{}{{sca}}{{}}}
\bibcite{op2-cf}{{3}{2012{}}{{Bertolli et~al.}}{{Bertolli, Betts, Kelly, Mudalige, and Giles}}}
\bibcite{op2-lcpc}{{4}{2012{}}{{Bertolli et~al.}}{{Bertolli, Betts, Loriant, Mudalige, Radford, Ham, Giles, and Kelly}}}
\bibcite{sblock}{{5}{2010}{{Brandvik and Pullan}}{{}}}
\bibcite{inspect-execute}{{6}{1994}{{Das et~al.}}{{Das, Uysal, Saltz, and Hwang}}}
\bibcite{liszt}{{7}{2011}{{DeVito et~al.}}{{DeVito, Joubert, Palacios, Oakley, Medina, Barrientos, Elsen, Ham, Aiken, Duraisamy, Darve, Alonso, and Hanrahan}}}
\bibcite{OP2-User}{{8}{2012}{{Giles}}{{}}}
\bibcite{CJ2011}{{9}{2012}{{Giles et~al.}}{{Giles, Mudalige, Sharif, Markall, and Kelly}}}
\bibcite{metis}{{10}{1998}{{Karypis and Kumar}}{{}}}
\bibcite{stencil-gpu-1}{{11}{2011}{{Maruyama et~al.}}{{Maruyama, Nomura, Sato, and Matsuoka}}}
\bibcite{sparsetiling}{{12}{2004}{{Strout et~al.}}{{Strout, Carter, Ferrante, and Kreaseck}}}
\@writefile{lof}{\contentsline {figure}{\numberline {11}{\ignorespaces Loop performance of NASA Rotor 37 with 2.5 million edges on a CPU with 6 OpenMP threads. The graph shows execution time of each loop in its original and split version}}{10}}
\newlabel{fig:openmp6}{{11}{10}}
\@writefile{lof}{\contentsline {figure}{\numberline {12}{\ignorespaces Loop performance of NASA Rotor 37 with 2.5 million edges on a CPU with 12 OpenMP threads. The graph shows execution time of each loop in its original and split version}}{10}}
\newlabel{fig:openmp12}{{12}{10}}
\newlabel{sigplanconf@finalpage}{{6}{10}}
